package com.yanqu.road.utils;

/**
 * @Description
 * @Author cwq
 * @Data 2021/6/26 17:47
 */
public class BitUtil {

    /**
     * 获取一个int值的第几位是否为1
     * @param bit 从0开始,到31
     */
    public static boolean get(int val, int bit) {
        return (val&(1<<bit)) != 0;
    }

    /** 设置一个int值
     * @param val 值
     * @param bit 要设置的位数0-31
     * @param set 是否设置为1
     * @return 设置完的值
     */
    public static int set(int val, int bit, boolean set) {
        if(set) return val | (1 << bit);
        return ~( ~val | (1 << bit) );
    }

    /**
     * 获取一个long值的第几位是否为1
     * @param bit 从0开始,到63
     */
    public static boolean get(long val, int bit) {
        return (val&(1L<<bit)) != 0;
    }

    /** 设置一个long值
     * @param bit 要设置的位数0-63
     * @param set 是否设置为1
     * @return 设置完的值
     */
    public static long set(long val, int bit, boolean set) {
        if(set) return val | (1L << bit);
        return ~( ~val | (1L << bit) );
    }


    public static void main(String[] args) {
        int i = 11;
        System.out.println(get(i,2));

        System.out.println(set(i,2,true));
    }

}
